home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-19
/
rk_plot.zip
/
PLOT.DOC
< prev
next >
Wrap
Text File
|
1991-05-13
|
8KB
|
172 lines
┌───────────────────────────────────────────────────────────────────────────┐
│ │
│ Algorithmen zur grafischen Darstellung einer Funktion z = F(x,y). │
│ │
│ Version 1.0 │
│ │
├───────────────────────────────────────────────────────────────────────────┤
│ Copyright (C) 1991, Hans-Jürgen Herrler und Dieter Sosna │
└───────────────────────────────────────────────────────────────────────────┘
B E S C H R E I B U N G
=======================
In der Unit PLOT sind einige schnelle Algorithmen zur grafischen Darstellung
von Funktionen zweier Veränderlicher implementiert. Diese können leicht in
eigene Programme eingebunden werden. Durch die Verfügbarkeit des Quelltextes
ist eine Anpassung an spezielle Bedürfnisse möglich.
Die Unit PLOT ist unter Turbo Pascal ab Version 5.5 nutzbar (mit unbedeutenden
Änderungen schon ab Version 4.0). Sollen auch Veränderungen an den Assembler-
Routinen erfolgen, wird zusätzlich ein Assembler benötigt: z.B. Turbo
Assembler 2.0.
Hinweise zur Weitergabe und zur Nutzung der Software werden in der Datei
COPYRIGT.TXT gegeben.
Allgemeines zur Nutzung
=======================
Die Funktionswerte der darzustellenden Funktion z = F(x,y) müssen über einem
äquidistanten Gitter (Stützstellen) berechnet und zeilenweise in einer Matrix
abgelegt worden sein. Der Routine zur grafischen Darstellung wird nur ein
Zeiger auf das erste Element der Matrix übergeben. So kann sich die Matrix an
beliebiger Stelle im Speicher befinden. Es ist wichtig, daß die einzelnen
Zeilen der Matrix lückenlos aufeinanderfolgen - auch bei einer Ablage der
Matrix auf dem Heap! Andernfalls sind Änderungen an der Zeiger-Arithmetik
erforderlich. Die Funktionswerte selbst sind vom Typ Float - definiert in der
Unit PLOT. Der Typ Float kann den jeweiligen Erfordernissen angepaßt werden.
Im Kopf der Unit PLOT ist die Direktive "ALPHA-" zur bedingten Compilierung
definiert. Dies bewirkt, daß bei den Darstellungen AlphaScheibenPerspektive
und GitterFlaechenPerspektive (die beide auf dem modifizierten Alpha-Puffer-
Algorithmus beruhen) in der Prozedur AlphaPunktSetzen (ALPHA-.ASM bzw.
ALPHA-.OBJ) nicht überprüft wird, ob sich die Koordinaten des gerade be-
arbeiteten Pixels innerhalb der Grenzen des Bildschirmes befinden:
0 <= x <= GetMaxX, 0 <= y <= GetMaxY.
Diese Prüfung erübrigt sich in den meisten Fällen, da sich die Prozedur
AlphaPunktSetzen auf Graph.PutPixel abstützt, wobei sowieso ein Clippen am
eingestellten ViewPort erfolgt. Für spezielle Fälle ist aber auch eine Version
von AlphaPunktSetzen vorhanden, die diesen Test selbst vollzieht: aktiviert
durch Löschen der Compilerdirektive "ALPHA-" wird dann ALPHA.OBJ eingebunden.
Routinen zur grafischen Darstellung
===================================
VolumenPerspektive(VAR Matrix; MatrixParm: MatrixParameter;
BildParm: BildParameter; UseHeap: Boolean)
AlphaScheibenPerspektive(VAR Matrix; MatrixParm: MatrixParameter;
BildParm: BildParameter)
GitterFlaechenPerspektive(VAR Matrix; MatrixParm: MatrixParameter;
BildParm: BildParameter; UseHeap: Boolean)
Übergabeparameter
=================
Parameter Matrix:
Darzustellende Funktionswerte (VAR-Parameter).
Record MatrixParm:
Enthält die Zeilen- (XGitter) und Spaltenzahl (YGitter) der Matrix sowie
den kleinsten (ZMin) und größten (ZMax) Funktionswert.
Record BildParm:
Enthält die Beschreibung des zu erzeugenden Bildes, also den Bildschirm-
ausschnitt (SchirmLinks, SchirmRechts, SchirmOben, SchirmUnten), Farben
(Color...), Betrachtungswinkel (Alpha, Gamma), Projektionsart und davon
abhängig den Betrachtungsabstand und die Brennweite bei Zentralprojektion
bzw. an deren Stelle das Verhältnis "BrennweiteZuAbstand" bei Parallel-
projektion.
Jene Darstellungen, die ein Gitter auf der Fläche erzeugen, können beschleu-
nigt werden, wenn vorab alle Stützstellen auf Gerätekoordinaten transformiert
werden. Dazu ist für den zusätzlichen Parameter UseHeap True zu übergeben. Es
wird daraufhin geprüft, ob auf dem Heap Platz für eine temporäre Matrix ist
und gegebenenfalls die Transformation ausgeführt. Danach wird der Platz auf
dem Heap wieder freigegeben. Ist nicht ausreichend Platz vorhanden oder
UseHeap = False, so wird ohne eine Vorab-Transformation gezeichnet.
Es gelten folgende Einschränkungen für die Parameter, die jeder Nutzer vor der
Übergabe selbst überprüfen muß:
2 <= XGitter <= MaxGitter
2 <= YGitter <= MaxGitter
0 <= SchirmLinks < SchirmRechts <= 1
0 <= SchirmOben < SchirmUnten <= 1
-180 <= Alpha <= 180
-90 <= Gamma <= 90
(bei AlphaScheibenPerspektive nur 0 <= Gamma <= 90)
Sinnvoll sind folgende Werte:
20 <= Brennweite <= 60
200 <= Abstand <= 4000
BrennweiteZuAbstand etwa 0.1
Beim Experimentieren mit Brennweite und Abstand kann man sich an üblichen
Werten aus der Kleinbildfotografie orientieren.
Der Wert Alpha = 0 entspricht einer Lage der x-Achse parallel zur Bildschirm-
ebene mit wachsenden Werten nach rechts, während die y-Achse senkrecht auf der
Bildschirmebene steht und vom Betrachter weg weist. Eine Vergrößerung von
Alpha dreht die x-Achse aus der Bildschirmebene zum Betrachter hin.
Bei der Wahl der Projektionsart Zentralprojektion ist zu beachten, daß nur die
VolumenPerspektive fehlerfreie Bilder garantiert. AlphaScheibenPerspektive und
GitterFlaechenPerspektive können bei Zentralprojektion zu Bildfehlern führen!
Zugriff auf die Matrix der Funktionswerte
=========================================
Weiterhin wird eine Funktion zum Zugriff auf die Matrixelemente bereit-
gestellt, die insbesondere bei Ablage der Matrix auf dem Heap nützlich ist:
FUNCTION Element(P: Pointer; i, j, SpaltenLen: Word): FloatPointer;
Ihre Argumente sind:
P ein Zeiger auf das erste Matrixelement
i Zeilennummer des Matrixelementes
j Spaltennummer des Matrixelementes
SpaltenLen Zahl der Matrixelemente in einer Zeile ( = XGitter)
Die Funktion liefert dann einen Zeiger auf das gesuchte Element.
Liste der zugehörigen Dateien
=============================
COPYRIGT.TXT Benutzerlizenz.
PLOT.DOC Diese Beschreibung.
PLOT.PAS Enthält Quelltext der Algorithmen zur grafischen
Darstellung (Unit).
ALPHA.ASM Assembler-Quelltext einiger Routinen aus PLOT.PAS,
Version mit Bereichsprüfung.
ALPHA.OBJ Zugehöriges Objektfile.
ALPHA-.ASM Assembler-Quelltext einiger Routinen aus PLOT.PAS,
Version ohne Bereichsprüfung.
ALPHA-.OBJ Zugehöriges Objektfile.
ZEIGER.ASM Assembler-Quelltext einiger Routinen zur Pointer-
Arithmetik aus PLOT.PAS.
ZEIGER.OBJ Zugehöriges Objektfile.
EXAMPLE.PAS Quelltext des Beispielprogramms.
EXAMPLE.EXE Lauffähiges Beispielprogramm.
EXAMPLE7.EXE Lauffähiges Beispielprogramm (Version für 80x87).